AtCoder AGC 034 A - Kenken Race (400 点)
二人がマス目上で右に$ 1マスか$ 2マス進める条件で目的のマスにまで到達できるかどうか判定する問題。ただし、途中に岩があり、そこは飛び越える必要がある。
考察履歴
'#'の岩が2連続で続くと駄目そう
文字列操作の問題なのでpythonで解こう
$ 1マスには一人しか存在できないので、A(すぬけくん)がB(ふぬけくん)を追い越す場合は、別途考慮が必要
$ C<Dの場合は、岩2連続の有無のみの判定で良さそう
$ C>Dの場合は、岩2連続の有無に加えて、追い越せるかどうか、つまり空マス$ .3連続がの有無の判定が必要
空マス判定の範囲は$ Aの位置から$ Dの位置までになる。この範囲設定にミスって2WA叩いた。
$ Bがスタート地点またはゴール地点で追い越させることを考慮できる範囲が上記。
実装
他者解答をみたら、指定範囲に対して、条件比較ができるので、ランレングス圧縮しなくても簡単に書ける Rustの場合はwindows()メソッドを利用すれば良さそう
最初無理に、AとBの文字をマス文字列に追記してたが、そのような操作は不要
ACコード
code:python
def rle_comp(S):
rle = []
pre = 'X'
chain = 1
for c in S:
if c == pre:
chain += 1
else:
if pre != 'X':
pre = c
chain = 1
return rle
N,A,B,C,D = map(int,input().split())
S = input()
ans = "Yes"
if C < D:
for i in range(len(rle)):
if rlei0 == '#' and rlei1 >= 2: ans = "No"
else:
for i in range(len(rle)):
if rlei0 == '#' and rlei1 >= 2: ans = "No"
space = False
for i in range(len(rle)):
if rlei0 == '.' and rlei1 >= 3: space = True
if space == False:
ans = "No"
print(ans)